/*
 * VUI - jQuery Select/Radio/Checkbox Plugin
 * version:1.0.0-2013.10.30
 * @requires jQuery v1.10 or later
 * Copyright (c) 2013 vomoc studio
 * Examples and documentation at:
 * http://www.52vm.com/jquery/vui/
 * Email:vomoc@qq.com
 */
(function($) {
	$.fn.VSelect = function(options) {
		// 初始化
		$(this).each(function() {
			var $select = $(this);
			var $mimic = $('<div>')
			.addClass('vui_select')
			.addClass($select.attr('class'))
			.css({'MozUserSelect': 'none', 'zIndex': $select.attr('zindex')})
			.attr('unselectable', 'on')
			.attr('id', $select.attr('id'))
			.attr('name', $select.attr('name'))
			.attr('title', $select.attr('title'))
			.on('selectstart', function() {
				return false;
			})
			.on('vselect.change', function(){
				$(this).find('.vui_text').text($(this).find('.vui_selected:first').text());
			});
			// 创建显示节点
			var $show = $('<div>').addClass('vui_show');
			var $text = $('<div>').addClass('vui_text');
			if (parseInt($select.attr('width'), 10) > 0) {
				$text.width($select.attr('width') - 40);//?40
			}
			$show.append($text);
			$mimic.append($show);
			// 创建下拉菜单
			var ul = $('<ul>');
			$select.find('option').each(function() {
				var li = $('<li>').attr('uival', $(this).attr('value')).text($(this).text());
				if ($(this).attr('selected') == 'selected') {
					li.addClass('vui_selected');
				}
				ul.append(li);
			});
			$mimic.append(ul);
			// 为option添加事件
			setVSelectLiEvents(ul.find('li'));
			// 设置下拉菜单尺寸
			setVSelectUlSize(ul);
			// 点击任意位置关闭下拉菜单
			$(document).on('click', function(e) {
				if (!$(e.target).is($show) && !$(e.target).is($text)) {
					ul.hide();
				}
			});
			// 展开下拉菜单
			$show.on('click', function() {
				ul.toggle();
			});
			// 默认选项
			if (ul.find('.vui_selected').length == 0) {
				ul.find('li:first').trigger('click');
			} else {
				ul.find('.vui_selected').trigger('click');
			}
			$select.replaceWith($mimic);
		});
	};
	// 获取选中项的值
	$.fn.VSelectVal = function() {
		return $(this).find('.vui_selected:first').attr('uival');
	}
	// 插入select的option项
	$.fn.VSelectInsertOption = function(key, value) {
		var is_click = typeof(arguments[2]) == 'boolean' ? arguments[2] : true;
		$(this).each(function() {
			var $ul = $(this).find('ul');
			var $li = $('<li>').attr('uival', value).text(key);
			$ul.append($li);
			setVSelectLiEvents($li);
			setVSelectUlSize($ul);
			if (is_click) {
				$li.trigger('click');
			}
		});
	};
	// 删除select的option项
	$.fn.VSelectRemoveOption = function(value) {
		var remove_by = typeof(arguments[1]) == 'number' ? arguments[1] : 0;
		$(this).each(function() {
			var $ul = $(this).find('ul');
			switch (remove_by) {
			case 0:
				$ul.find('li[uival="' + value + '"]').remove();
				break;
			case 1:
				$ul.find('li').each(function() {
					if ($(this).text() == value) {
						$(this).remove();
					}
				});
				break;
			case 2:
				$ul.find('li:eq(' + value + ')').remove();
				break;
			default:
				return;
			};
			setVSelectUlSize($ul);
			if ($ul.find('li').length == 0) {
				$(this).find('.vui_text').text('.');
			} else {
				$ul.find('li:first').trigger('click');
			}
		});
		$(this).trigger('vselect.remove');
	};

	function setVSelectLiEvents($li) {
		$li.on('click', function() {
			$(this).siblings('li').removeClass('vui_selected');
			$(this).addClass('vui_selected');
			$(this).parents('.vui_select').trigger('vselect.change');
		}).on('mouseover', function() {
			if (!$(this).hasClass('vui_selected')) {
				$(this).addClass('vui_over');
			}
		}).on('mouseout', function() {
			$(this).removeClass('vui_over');
		});
	}

	function setVSelectUlSize($ul) {
		var $temp = $('<div>').addClass('vui_select_temp');
		$ul.find('li').each(function() {
			var $item = $('<div>').text($(this).text());
			$temp.append($item);
		});
		$('body').append($temp);
		var width = $temp.width();
		var height = $temp.height();
		$temp.remove();
		if (height > 220) {
			$ul.width(width + 36);
			$ul.height(220).css('overflow-y', 'scroll');
		} else {
			$ul.width(width + 20);
			$ul.height(height);
		}
		return $ul;
	};
	
	$.fn.VRadio = function() {
		// 初始化
		$(this).each(function() {
			var $radio = $(this);
			var $mimic = $('<div>')
			.addClass('vui_radio')
			.addClass($radio.attr('class'))
			.css('MozUserSelect', 'none')
			.attr('unselectable', 'on')
			.attr('name', $radio.attr('name'))
			.attr('id', $radio.attr('id'))
			.attr('title', $radio.attr('title'))
			.on('selectstart', function() {return false;});
			// 创建显示节点
			var $show = $('<div>')
			.addClass('vui_show')
			.attr('uival', $radio.attr('value'));
			if ($radio.attr('checked') == 'checked') {
				$show.addClass('vui_checked');
			}
			if(typeof($radio.attr('text')) == 'undefined'){
				$show.css('paddingRight', '0');
			}else{
				$show.text($radio.attr('text'));
			}
			$mimic.append($show);
			// 添加事件
			if ($radio.attr('readonly') != 'readonly' && $radio.attr('disabled') != 'disabled') {
				$mimic.on('click', function() {
					$('.vui_radio[name="' + $(this).attr('name') + '"]').find('.vui_show').removeClass('vui_checked');
					$(this).find('.vui_show').addClass('vui_checked');
				});
			}
			// 替换
			$radio.replaceWith($mimic);
		});
	};

	$.fn.VCheckbox = function() {
		// 初始化
		$(this).each(function() {
			var $checkbox = $(this);
			var $mimic = $('<div>')
			.addClass('vui_checkbox')
			.addClass($checkbox.attr('class'))
			.css('MozUserSelect', 'none')
			.attr('unselectable', 'on')
			.attr('name', $checkbox.attr('name'))
			.attr('id', $checkbox.attr('id'))
			.attr('title', $checkbox.attr('title'))
			.on('selectstart', function() {return false;});
			// 创建显示节点
			var $show = $('<div>')
			.addClass('vui_show')
			.attr('uival', $checkbox.attr('value'));
			if ($checkbox.attr('checked') == 'checked') {
				$show.addClass('vui_checked');
			}
			if(typeof($checkbox.attr('text')) == 'undefined'){
				$show.css('paddingRight', '0');
			}else{
				$show.text($checkbox.attr('text'));
			}
			$mimic.append($show);
			// 添加事件
			if ($checkbox.attr('readonly') != 'readonly' && $checkbox.attr('disabled') != 'disabled') {
				$mimic.on('click', function() {
					$(this).find('.vui_show').toggleClass('vui_checked');
				});
			}
			// 替换
			$checkbox.replaceWith($mimic);
		});
	};
	
})(jQuery);

function VRadioVal(name) {
	return $('.vui_radio[name="' + name + '"]').find('.vui_checked:first').attr('uival');
}
function VCheckboxVal(name) {
	var opts = {};
	$('.vui_checkbox[name="' + name + '"] .vui_checked').each(function(i) {
		opts[i] = $(this).attr('uival');
	});
	return opts;
}